package lesbonsamis

class DepenseController {

    def transactionService
    
    static allowedMethods = [ajouter:'POST', sauver:'POST']

	def index = {
		redirect(action:'liste')
	}
	
	def liste = {
		Projet projet = Projet.get(session.projetId)
		
		// mise à jour du projet
		transactionService.calculMaj(projet)
		projet.save(flush: true)
		
		def listeDepense = projet.depenses		
		render(view:"liste", model:['listeDepense':listeDepense])
	}
	
	def creer = {
		Projet projet = Projet.get(session.projetId)
		
		// initialisation de la dépense
		Depense depense = new Depense(params)
		depense.payeur = projet.responsable
		depense.consommateurs = projet.participants
		
		def listeParticipant = projet.participants
		
		render(view:"creer", model:['depense': depense, 'listeParticipant':listeParticipant])
	}
	
	def ajouter = {
		Projet projet = Projet.get(session.projetId)			
		Depense depense = new Depense(params)
		
		depense.projet = projet
		
		// récupération éventuelle du payeur
		if (params.payeurId) {
			depense.payeur = Participant.get(params.payeurId)
		}

		// récupération éventuelle des consommateurs
		def consommateursId = params.list("consommateursId")
		if (consommateursId) {
			consommateursId.each {
				depense.addToConsommateurs(Participant.get(it))
			}
		}
		
		projet.addToDepenses(depense).save(flush: true)
		
		redirect("action":liste)
	}
	
	def editer = {
		Projet projet = Projet.get(session.projetId)
		Depense depense = Depense.get(params.id)
		
		def listeParticipant = projet.participants
		render(view:"editer", model:['depense': depense, 'listeParticipant':listeParticipant])
	}
	
	def sauver = {
		Projet projet = Projet.get(session.projetId)
		Depense depense = Depense.get(params.id)		
		
		// récupération éventuelle du payeur
		if (params.payeurId) {
			depense.payeur = Participant.get(params.payeurId)
		}
		
		// récupération éventuelle des consommateurs
		def consommateursId = params.list("consommateursId")
		if (consommateursId) {
			depense.consommateurs.clear()
			consommateursId.each {
				depense.addToConsommateurs(Participant.get(it))
			}
		}
		
		// récupération des modfications
		depense.properties = params
		depense.save(flush: true)
		
		redirect("action":liste)
	}
	
	def supprimer = {
		Projet projet = Projet.get(session.projetId)
		Depense depense = Depense.get(params.id)
		
		projet.removeFromDepenses(depense)
		depense.delete(flush: true)
		
		redirect("action":liste)
	}
}
